package main.java.br.com.projeto.domain.entity;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;

@Entity
public class Venda extends Nota {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3496381622137061087L;

//	@EmbeddedId
//	private NotaPK notaPK;
	
	@Id
	@Column(name="numero_nota")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long numeroNota;
	
	@Column(name="numero_serie")
	private String numeroSerie;
	
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
	private Cliente cliente;
	
	@Transient
	private List<ItemVenda> itensVenda;
	
	@Column
	private Float multa;

	@Column
	private Float descontoValor;
	
	@Column
	private Float descontoPercentual;
	
	@Enumerated(EnumType.ORDINAL)
	private Status status;
	
//	public NotaPK getNotaPK() {
//		return notaPK;
//	}
//
//	public void setNotaPK(NotaPK notaPK) {
//		this.notaPK = notaPK;
//	}
	
	@Column
	private Float bcIcms;

	@Column
	private Float valorIcms;

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<ItemVenda> getItensVenda() {
		return itensVenda;
	}

	public void setItensVenda(List<ItemVenda> itensVenda) {
		this.itensVenda = itensVenda;
	}

	public Float getDescontoValor() {
		return descontoValor;
	}

	public void setDescontoValor(Float descontoValor) {
		this.descontoValor = descontoValor;
	}

	public Float getDescontoPercentual() {
		return descontoPercentual;
	}

	public void setDescontoPercentual(Float descontoPercentual) {
		this.descontoPercentual = descontoPercentual;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public Long getNumeroNota() {
		return numeroNota;
	}

	public void setNumeroNota(Long numeroNota) {
		this.numeroNota = numeroNota;
	}



	public String getNumeroSerie() {
		return numeroSerie;
	}

	public void setNumeroSerie(String numeroSerie) {
		this.numeroSerie = numeroSerie;
	}

	public Float getMulta() {
		return multa;
	}

	public void setMulta(Float multa) {
		this.multa = multa;
	}

	public void calculaTotalNota() 
	{
		this.setTotalNota((double) 0);

		for ( ItemVenda item : this.itensVenda )
		{
			this.setTotalNota( this.getTotalNota() + item.getTotal() );
		}
	}

	public Float getBcIcms() {
		return bcIcms;
	}

	public void setBcIcms(Float bcIcms) {
		this.bcIcms = bcIcms;
	}

	public Float getValorIcms() {
		return valorIcms;
	}

	public void setValorIcms(Float valorIcms) {
		this.valorIcms = valorIcms;
	}
	
	public void calculaImposto()
	{
		this.setBcIcms( Float.valueOf(0) );
		this.setValorIcms( Float.valueOf(0) );
		
		for ( ItemVenda item : this.itensVenda )
		{
			if ( item.getBcIcms() != null )
			{
				this.setBcIcms( this.getBcIcms() + item.getBcIcms() );
			}
			if ( item.getValorIcms() != null )
			{
				this.setValorIcms( this.getValorIcms() + item.getValorIcms() );
			}
		}
	}
	
	public Float getTotalItensNota()
	{
		float valor = 0;
		for ( ItemVenda item : this.itensVenda )
		{
			valor += item.getTotal() ;
		}
		return valor;
	}
}

